table of contents
STAT(2) | Podręcznik programisty Linuksa | STAT(2) |
NAZWA¶
stat, fstat, lstat - pobierz status pliku
SKŁADNIA¶
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *file_name, struct stat
*buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *file_name, struct stat
*buf);
OPIS¶
Funkcje te zwracają informacje o podanym pliku. Do uzyskania tej informacji nie są wymagane prawa dostępu do pliku, lecz konieczne są prawa przeszukiwania katalogów, leżących na jego ścieżce.
stat zwraca status pliku wskazywanego przez file_name, ładując go do argumentu buf.
lstat jest identyczny jak stat, lecz nie zwraca on statusu plików, wskazywanych przez dowiązania, a status samego dowiązania.
fstat jest identyczny ze stat, lecz status jest zwracany dla pliku wskazywanego przez filedes (zwrócony przez open(2)).
Wszystkie te funkcje zwracają strukturę stat, która jest zadeklarowana następująco:
struct stat {
dev_t st_dev; /* urządzenie */
ino_t st_ino; /* i-węzeł (inode) */
umode_t st_mode; /* ochrona */
nlink_t st_nlink; /* liczba dowiązań stałych (hardlinks) */
uid_t st_uid; /* ID użytkownika właściciela */
gid_t st_gid; /* ID grupy właściciela */
dev_t st_rdev; /* typ urządzenia (jeśli urządzenie inode) */
off_t st_size; /* całkowity rozmiar w bajtach */
unsigned long st_blksize; /* wielkość bloku dla I/O systemu plików */
unsigned long st_blocks; /* ilość zaalokowanych bloków */
time_t st_atime; /* czas ostatniego dostępu */
time_t st_mtime; /* czas ostatniej modyfikacji */
time_t st_ctime; /* czas ostatniej zmiany */ };
Zauważ, że st_blocks nie zawsze musi wyrażać wielkość w blokach wielkości st_blksize, i że st_blksize może zamiast tego dawać wielkość "preferowanego" rozmiaru bloku dla efektywnego I/O.
Nie wszystkie systemy plików Linuksa implementują wszystkie z tych pól. Zazwyczaj st_atime jest zmieniane przez mknod(2), utime(2), read(2), write(2), and truncate(2).
Zazwyczaj st_mtime jest zmieniane przez mknod(2), utime(2), and write(2). st_mtime nie jest zmieniane po zmianach właściciela, grupy, liczby stałych (hardlinks) czy praw.
Zazwyczaj st_ctime jest zmieniane przy zapisywaniu lub ustawianiu informacji i-węzła (np. właściciela, grupy, liczby dowiązań, praw, itp).
Następujące makra sprawdzają typ pliku:
- S_ISLNK(m)
- czy dowiązanie symboliczne (symbolic link)?
- S_ISREG(m)
- czy plik regularny?
- S_ISDIR(m)
- katalog?
- S_ISCHR(m)
- urządzenie znakowe?
- S_ISBLK(m)
- urządzenie blokowe?
- S_ISFIFO(m)
- fifo?
- S_ISSOCK(m)
- gniazdo?
Dla pola st_mode zdefiniowano następujące flagi:
- S_IFMT
- 00170000 maska bitowa dla pól bitowych typu pliku
- S_IFSOCK
- 0140000 gniazdo
- S_IFLNK
- 0120000 dowiązanie symboliczne (symbolic link)
- S_IFREG
- 0100000 plik regularny
- S_IFBLK
- 0060000 urządzenie blokowe
- S_IFDIR
- 0040000 katalog
- S_IFCHR
- 0020000 urządzenie znakowe
- S_IFIFO
- 0010000 fifo
- S_ISUID
- 0004000 bit `set UID'
- S_ISGID
- 0002000 bit `set GID'
- S_ISVTX
- 0001000 bit `sticky'
- S_IRWXU
- 00700 użytkownik (właściciel pliku) ma prawa odczytu, zapisu i wykonania
- S_IRUSR (S_IREAD)
- 00400 użytkownik ma prawa odczytu
- S_IWUSR (S_IWRITE)
- 00200 użytkownik ma prawa zapisu
- S_IXUSR (S_IEXEC)
- 00100 użytkownik ma prawa wykonania
- S_IRWXG
- 00070 grupa ma prawa odczytu, zapisu i wykonania
- S_IRGRP
- 00040 grupa ma prawa odczytu
- S_IWGRP
- 00020 grupa ma prawa zapisu
- S_IXGRP
- 00010 grupa ma prawa wykonania
- S_IRWXO
- 00007 inni mają prawa odczytu, zapisu i wykonania
- S_IROTH
- 00004 inni mają prawa odczytu
- S_IWOTH
- 00002 inni mają prawa zapisu
- S_IXOTH
- 00001 inni mają prawa wykonania
WARTOŚĆ ZWRACANA¶
Po sukcesie zwracane jest zero. Po błędzie -1 i ustawiane jest errno.
BŁĘDY¶
ZGODNE Z¶
SVID (nie lstat()), AT&T (nie lstat()), POSIX (nie lstat()), X/OPEN (nie lstat()), BSD 4.3
ZOBACZ TAKŻE¶
1 Stycznia 1995 | Linux 1.1.75 |